Q. strict mode를 언제 사용하는지와 동작 예시를 말해 주세요.
🧑🏻💻 Answer.
✅ 언제 사용하는지
strict mode는 JS 언어의 문법을 보다 엄격히 할 때 사용됩니다.
strict mode에서는 기존에는 무시되던 오류들과 자바스크립트 엔진의 최적화 작업에 문제를 일으킬 수 있는 코드에 대해 명시적인 에러를 발생시킵니다.
✅ 동작 예시
암묵적 전역 변수 방지
// 선언이 생략된 변수는 암묵적으로 var로 선언되어 전역 변수로 동작한다.
function foo() {
x = 10;
}
foo();
console.log(x); // 10function foo() {
'use strict';
x = 10; // ReferenceError: x is not defined
}
y = 10;
console.log(y); // 10
foo();'use strict';
function foo() {
x = 10; // ReferenceError: x is not defined
}
foo();delete 명령어 사용 불가
(function () {
var x = 1;
delete x; // x는 프로퍼티가 아닌 변수이므로 delete 가 적용되지 않는다.
consile.log(x) // 1, 삭제가 되지는 않지만 에러가 발생 하지는 않는다.
}());(function () {
'use strict';
var x = 1;
delete x; //
// SyntaxError: Delete of an unqualified identifier in strict mode.
}());매개 변수 중복 사용 불가
- 중복으로 사용된 매개 변수에 대한 에러를 던집니다.
(function () {
function foo(x, x) {
return x + x;
}
console.log(foo(1, 2)); // 4, 2로 덮어씌어짐
}());(function () {
'use strict';
//SyntaxError: Duplicate parameter name not allowed in this context
function foo(x, x) {
return x + x;
}
console.log(foo(1, 2));
}());
- eval() 함수의 사용 불가
- 보안상의 이유로 eval() 함수의 사용이 제한됩니다.
- this 바인딩
strict mode에서는 함수 내에서 this 키워드가 전역 객체를 참조하지 않고 undefined를 가리킵니다.
이에 따라 this에 의존하는 코드의 수정이 필요합니다.